﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Samples.ServiceHosting.StorageClient;
using System.Globalization;

using BusinessLogic.Tools;

namespace ZeCloud.Resto55.Business.Table
{
    /*
      * Ref Resto, Adresse, Département, Ville
      * Facultatif : site web, téléphone, spécialité
      */
    public class Resto : TableStorageEntity
    {

        // User defined properties
        public string nom { get; set; }
        public string adr1 { get; set; } // Optionnel
        public string adr2 { get; set; } // Optionnel
        public int dep { get; set; } // [PENDING] on pourrait le déduire avec le service web ad-hoc
        public int codepostal { get; set; } // si vide, déduis de (dep + 000), important pour paris
        public string ville { get; set; }
        public string site { get; set; } // Optionnel
        public string tel { get; set; } // Optionnel
        public string idCreator { get; set; } // Optionnel
        public Element[] elements { get; set; }
        public string uniqueId { get; set; } // Indépendant de l'évolution dans le temps de la clé de partitionnement

        public Resto()
        {
        }

        public Resto(string in_idCreator, string in_nom, int in_codepostal, string in_ville)
        {
            // [PENDING] Supprimer l'accuentation pour la recherche
            string villeSansAccents = StringHelper.RemoveAccentuation(in_ville);
            
            // Ville_Departement
            PartitionKey = String.Format("{0}_{1}", villeSansAccents, in_codepostal);

            // Date
            RowKey = String.Format("{0:10}", DateTime.Now.Ticks);

            nom = in_nom;
            codepostal = in_codepostal;
            dep = Int32.Parse(in_codepostal.ToString().Substring(0, 2));
            ville = in_ville;

            // A conserver même si elle peut être déduite, car la clé de partitionnement peut varier dans le temps !
            uniqueId = GetUniqueRestoId();

            idCreator = in_idCreator;
        }

        // Ronny@Comment : je me demande s'il ne vaut pas mieux regrouper tous les éléments et details prix 
        // dans la même partition key à savoir celui du resto. Ou Alors stocker la variable "uniqueRestoId" dans Resto
        // car pour utiliser en web service, la methode GetUniqueRestoId ne sera pas exposée
        // Steve@comment : bonne remarque, je 
        string GetUniqueRestoId()
        {
            return PartitionKey + "_" + RowKey;
        }

        public static string GetUniqueIdForResto(Resto in_resto)
        {
            return String.Format("{0}_{1}", in_resto.PartitionKey, in_resto.RowKey);
        }

        public static string ExtractPartitionKeyFromRestoUniqueId(string in_idResto)
        {
            string[] splitted = in_idResto.Split('_');
            return String.Format("{0}_{1}", splitted[0], splitted[1]);
        }

        public static string ExtractRowKeyFromRestoUniqueId(string in_idResto)
        {
            string[] splitted = in_idResto.Split('_');
            return splitted[2];
        }

    }
}
